#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020/10/6 22:55
# @Author : youngchaolin

# 1 装饰器的使用：登录认证
# 只有登录成功后，才能访问博客园的页面里的内容，否则提示重新登录

#  定义一个字典，记录登录状态
status_dict={
    # 'username':None,
    'status':False
}

# 三次登录验证函数，直接拿来用
# 登录成功，返回True，三次登录都验证失败，则返回False
def login_check():
    count=1
    while count<4:
        u=input("请输入用户名")
        p=input("请输入密码")
        # 读取文件，获取用户名和密码，保存到一个字典中
        with open('login.txt',mode='r',encoding='utf-8') as f:
            for line in f:
                # 读取文件后，密码会加一个\n换行符，需要使用strip去掉
                if u == line.split('|')[0].strip() and p == line.split('|')[1].strip():
                    print("登录成功")
                    return True
        # 能执行到这里，说明登录失败
        print('登录失败')
        # 提示剩余次数
        print("你还有%d次机会"%(3-count))
        # 次数
        count+=1
    else:
        print("没机会了老哥")
        return False



# 定义装饰器
def auth(f):
    def inner(*args,**kwargs):
        # 访问函数之前的操作
        # 访问被装饰函数之前，写一个三次登录认证的功能
        # 登录成功，让其访问被装饰函数，登录没有成功，不让访问
        if status_dict.get('status'):
            ret=f(*args,**kwargs)
            # 访问函数之后的操作
            return ret
        else:
            # 登录
            status_dict['status']=login_check()
            if status_dict.get('status'):
                ret=f(*args,**kwargs)
                return ret
            else:
                print('登录失败，请重新登录')
    return inner

def login():
    print('请完成登录功能')

def register():
    print('请完成注册功能')

@auth
def article():
    print('欢迎进入文章页面')
@auth
def comment():
    print('欢迎进入评论页面')
@auth
def dairy():
    print('欢迎进入随笔页面')

# 可以直接调用，在调用之前，需要进行登录和注册验证的装饰
article()
# 只要前面一个成功了，后面的都可以访问
comment()
dairy()